/**
 * axios 实例
 */
import axios from 'axios';
import router from '@/router';
import { MessageBox } from 'element-ui';
import { API_BASE_URL, TOKEN_HEADER_NAME } from '@/config/setting';
import { getToken, setToken } from './token-util';
import { logout } from './page-tab-util';

const service = axios.create({
  baseURL: API_BASE_URL,
  timeout: 18000 // request timeout
});

/**
 * 添加请求拦截器
 */
service.interceptors.request.use(
  (config) => {
    // 添加 token 到 header
    const token = getToken();
    if (token && config.headers) {
      config.headers.common[TOKEN_HEADER_NAME] = token;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

/**
 * 添加响应拦截器
 */
service.interceptors.response.use(
  (res) => {
    // 登录过期处理
    if(res.data==null || res.data ==undefined){
      logout(true);
      return Promise.reject(new Error(res));
    }
    else{
      //去掉本地json查询过滤
      if(res.config.url != '/json/city-data.json'){
        if (res.data.code === undefined ||res.data.code === 401 || res.data.code === 403||res.data.code === 407||res.data.code === 201) {
          logout(true);
          return Promise.reject(new Error(res.data));
        }
        //未授权操作提示
        // else if ( res.data?.code === 403) {
        //   return Promise.reject(new Error(res.data.msg));
        // }
      }
    }
    // token 自动续期
    const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()];
    if (token) {
      setToken(token);
    }
    return res;
  },
  (error) => {
    if(error.response.status === 403 || error.response.status === 401){
      MessageBox.alert('登录状态已过期, 请退出重新登录!', '系统提示', {
        confirmButtonText: '重新登录',
        type: 'warning',
        callback: (action) => {
          if (action === 'confirm') {
            logout(false, router.currentRoute.path);
          }
        },
        beforeClose: () => {
          MessageBox.close();
        }
      });
    }
    else {
      logout(true);
    }
   
    return Promise.reject(error);
  }
);

export default service;
